package com.linQing.waterWork.utils;

import com.linQing.waterWork.annotation.EndTimeAfterStartTime;
import com.linQing.waterWork.modle.dto.PageEventHistoryDto;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Date;
public class ForBetweenTime implements ConstraintValidator<EndTimeAfterStartTime, PageEventHistoryDto> {

    public boolean isValid(PageEventHistoryDto pageEventInfoDto, ConstraintValidatorContext constraintValidatorContext) {
        if (pageEventInfoDto.getStartTime() == null&&pageEventInfoDto.getEndTime()==null) {
            return true;
        }
        if (pageEventInfoDto.getEndTime() == null && pageEventInfoDto.getStartTime() != null) {
            pageEventInfoDto.setEndTime(new Date());
        }
        if (pageEventInfoDto.getStartTime() == null && pageEventInfoDto.getEndTime() != null) {
            pageEventInfoDto.setStartTime(pageEventInfoDto.getEndTime());
            pageEventInfoDto.setEndTime(new Date());
        }
        if (pageEventInfoDto.getStartTime() != null && pageEventInfoDto.getEndTime() != null) {
            boolean isValid = pageEventInfoDto.getEndTime().after(pageEventInfoDto.getStartTime());
            if (!isValid) {
                constraintValidatorContext.disableDefaultConstraintViolation();
                constraintValidatorContext.buildConstraintViolationWithTemplate("结束时间必须大于开始时间，如果只查询一个时间，查询时间需小于当前时间")
                        .addPropertyNode("endTime")
                        .addConstraintViolation();
            }
            return isValid;
        }
        return true;
    }
}
